#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int NN=1e5+4;
pair<int,int>tmp[NN],a[NN],b[NN];
int tx[NN],ty[NN],l[NN],r[NN];
set<int>p1[NN],p2[NN];
priority_queue<int>q[NN];
int main()
{
	freopen("move.in","r",stdin);
	freopen("move.out","w",stdout);
	int tn,m,k;
	scanf("%d%d%d",&tn,&m,&k);
	for(int i=1;i<=tn;i++)
		scanf("%d%d",&tmp[i].first,&tmp[i].second);
	for(int i=1;i<=m;i++)
		scanf("%d%d",&b[i].first,&b[i].second);
	sort(tmp+1,tmp+1+tn);
	int n=0;
	for(int i=1;i<=tn;i++)
	{
		while(n&&a[n].second<=tmp[i].second)
			n--;
		a[++n]=tmp[i];
	}
	for(int i=1;i<=n;i++)
		tx[i]=a[i].first,ty[i]=-a[i].second;
	set<pair<int,int> >st[2][2];
	for(int i=1;i<=m;i++)
	{
		l[i]=lower_bound(ty+1,ty+1+n,-b[i].second)-ty,r[i]=upper_bound(tx+1,tx+1+n,b[i].first)-tx-1;
		if(!l[i]&&!r[i])
			st[0][0].insert({-b[i].first,i});
		else if(!l[i])
			st[0][1].insert({0,i});
		else if(!r[i])
			st[1][0].insert({-b[i].first-b[i].second,i});
		else
			st[1][1].insert({-b[i].second,i});
		p1[l[i]].insert(i),p2[r[i]].insert(i);
	}
	ll ans=0;
	int last=1;
	for(int i=1;i<=n;i++)
	{
		for(auto x:p1[i])
		{
			if(st[1][0].count({-b[x].first-b[x].second,x}))
			{
				st[1][0].erase({-b[x].first-b[x].second,x});
				st[0][0].insert({-b[x].first,x});
			}
			else
			{
				st[1][1].erase({-b[x].second,x});
				st[0][1].insert({0,x});
			}
			ll res=0;
			for(int j=min(i-1,r[x]);j>=last;j--)
				if(q[j].size())
				{
					res+=q[j].top();
					if(res>a[j].second-b[x].second)
					{
						ans+=a[j].second-b[x].second-res;
						l[x]=j;
						b[x].second=a[j].second;
						res=0;
					}
				}
			last=l[x];
			for(int j=l[x];j<=min(i-1,r[x]);j++)
				q[j].pop();
		}
		while(st[0][1].size()<k)
		{
			int w00=2e9+100;
			if(st[0][0].size())
				w00=a[i].first+st[0][0].begin()->first;
			int w10=2e9+100;
			if(st[1][0].size())
				w10=a[i].first+a[i].second+st[1][0].begin()->first;
			int w11=2e9+100;
			if(st[1][1].size())
				w11=a[i].second+st[1][1].begin()->first;
			if(w00<w10&&w00<w11)
			{
				int x=st[0][0].begin()->second;
				ans+=w00;
				q[i].push(w00);
				st[0][0].erase(st[0][0].begin());
				p2[i].insert(x);
				r[x]=i;
				b[x].first=a[i].first;
				st[0][1].insert({0,x});
			}
			else if(w10<w11)
			{
				int x=st[1][0].begin()->second;
				ans+=w10;
				st[1][0].erase(st[1][0].begin());
				p2[i].insert(x);
				p1[l[x]].erase(x);
				l[x]=r[x]=i;
				b[x].first=a[i].first,b[x].second=a[i].second;
				st[0][1].insert({0,x});
				ll res=0;
				for(int j=i-1;j>=last;j--)
					if(q[j].size())
					{
						res+=q[j].top();
						if(res>a[j].second-b[x].second)
						{
							ans+=a[j].second-b[x].second-res;
							l[x]=j;
							b[x].second=a[j].second;
							res=0;
						}
					}
				last=l[x];
				for(int j=l[x];j<i;j++)
					q[j].pop();
			}
			else
			{
				int x=st[1][1].begin()->second;
				ans+=w11;
				st[1][1].erase(st[1][1].begin());
				p1[l[x]].erase(x);
				l[x]=i;
				b[x].second=a[i].second;
				st[0][1].insert({0,x});
				ll res=0;
				for(int j=i-1;j>=last;j--)
					if(q[j].size())
					{
						res+=q[j].top();
						if(res>a[j].second-b[x].second)
						{
							ans+=a[j].second-b[x].second-res;
							l[x]=j;
							b[x].second=a[j].second;
							res=0;
						}
					}
				last=l[x];
				for(int j=l[x];j<i;j++)
					q[j].pop();
			}
		}
		for(auto x:p2[i])
		{
			if(st[0][1].count({0,x}))
			{
				st[0][1].erase({0,x});
				st[0][0].insert({-b[x].first,x});
			}
			else
			{
				st[1][1].erase({-b[x].second,x});
				st[1][0].insert({-b[x].first-b[x].second,x});
			}
		}
	}
	printf("%lld",ans);
	return 0;
}
